import { NextRequest, NextResponse } from 'next/server';
import { sqliteDb, Device, SqliteDatabase } from '@/lib/sqlite-database';
import { getDb } from '@/lib/json-database';
import fs from 'fs';
import path from 'path';

export async function POST(request: NextRequest) {
  try {
    console.log('开始重新迁移数据到真正的SQLite数据库...');
    
    // 强制关闭并删除现有数据库文件
    sqliteDb.close();
    SqliteDatabase.forceRebuild();
    
    // 创建新的数据库实例
    const newSqliteDb = new SqliteDatabase();
    console.log('SQLite数据库已重建');
    
    // 获取JSON数据库中的设备数据
    const jsonDb = getDb();
    const devices = jsonDb.getAllDevices();
    
    console.log(`找到 ${devices.length} 个设备，开始迁移...`);
    
    let migratedCount = 0;
    const errors: string[] = [];
    
    for (const device of devices) {
      try {
        // 将旧的设备数据映射到新的SQLite结构
        const newDevice: Omit<Device, 'id' | 'created_at' | 'updated_at'> = {
          device_id: device.id,
          name: device.name,
          classification_name: device.classificationName || '',
          classification_code: device.classificationCode || '',
          specialty: device.specialty,
          naming_table_id: device.namingTableId || '',
          position_table_id: device.positionTableId || '',
          base_params_table_id: device.baseParamsTableId || '',
          tech_spec_table_id: device.techSpecTableId || '',
          sequence_number: device.序号 || '',
          remarks: device.备注 || ''
        };
        
        // 插入设备到SQLite数据库
        const insertedDevice = newSqliteDb.insertDevice(newDevice);
        migratedCount++;
        
        // 创建示例参数数据
        createSampleParameters(insertedDevice.id!, newSqliteDb);
        
        console.log(`迁移设备: ${device.name} (${device.id}) -> ID: ${insertedDevice.id}`);
        
      } catch (error) {
        const errorMsg = `迁移设备 ${device.name} 时出错: ${error instanceof Error ? error.message : '未知错误'}`;
        console.error(errorMsg);
        errors.push(errorMsg);
      }
    }
    
    console.log(`数据迁移完成！成功迁移 ${migratedCount} 个设备`);
    
    // 显示迁移后的统计信息
    const stats = newSqliteDb.getDashboardStats();
    console.log('迁移后的数据统计:');
    stats.forEach(stat => {
      console.log(`- ${stat.name}: ${stat.count} 个设备`);
    });
    
    return NextResponse.json({
      success: true,
      message: `成功迁移 ${migratedCount} 个设备到SQLite数据库，支持中文字符编码`,
      migratedCount,
      totalDevices: devices.length,
      stats,
      errors: errors.length > 0 ? errors : undefined
    });
    
  } catch (error) {
    console.error('数据迁移失败:', error);
    return NextResponse.json({
      success: false,
      message: `数据迁移失败: ${error instanceof Error ? error.message : '未知错误'}`
    }, { status: 500 });
  }
}

// 创建示例参数数据的函数
function createSampleParameters(deviceId: number, dbInstance: SqliteDatabase) {
  // 创建示例命名参数（中文）
  const namingParams = [
    { parameter_name: '设备位号', parameter_value: '', data_type: 'string', is_required: true },
    { parameter_name: '设备名称', parameter_value: '', data_type: 'string', is_required: true },
    { parameter_name: '设备规格', parameter_value: '', data_type: 'string', is_required: false }
  ];
  
  // 创建示例位置参数（中文）
  const positionParams = [
    { parameter_name: '装置名称', parameter_value: '', data_type: 'string', is_required: true },
    { parameter_name: '系统名称', parameter_value: '', data_type: 'string', is_required: true },
    { parameter_name: '位置描述', parameter_value: '', data_type: 'string', is_required: false }
  ];
  
  // 创建示例基础参数（中文和单位）
  const baseParams = [
            { parameter_name: '额定流量', example_description: '', data_type: 'number', measurement_class: 'm³/h' },
        { parameter_name: '额定压力', example_description: '', data_type: 'number', measurement_class: 'MPa' },
        { parameter_name: '额定功率', example_description: '', data_type: 'number', measurement_class: 'kW' }
  ];
  
  // 插入参数到数据库
  namingParams.forEach(param => {
    dbInstance.insertNamingParameter({ ...param, device_id: deviceId });
  });
  
  positionParams.forEach(param => {
    dbInstance.insertPositionParameter({ ...param, device_id: deviceId });
  });
  
  baseParams.forEach(param => {
    dbInstance.insertBaseParameter({ ...param, device_id: deviceId });
  });
} 